home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / util / edit / jed207.lha / src / jed.lha / prefs.c < prev    next >
C/C++ Source or Header  |  1993-01-05  |  15KB  |  723 lines

  1.  
  2. /*
  3.  * PREFS.C
  4.  * (c) 1992-3 J.Harper
  5.  */
  6.  
  7. #include "jed.h"
  8. #include "revision.h"
  9. #include "jed_protos.h"
  10.  
  11. #define PREFFILE "s:jed.config"
  12.  
  13. Prototype   VOID    copyprefs        (VW *, VW *);
  14. Local        VOID    cloneprefs        (TX *, VW *);
  15. Prototype   VOID    getdefprefs        (TX *);
  16. Local        BOOL    interpretprefs  (STRPTR, TX *);
  17. Prototype   BOOL    setupfileprefs  (TX *);
  18. Prototype   BOOL    savefileprefs   (TX *);
  19. Prototype   VALUE * cmd_saveprefs   (LONG, VALUE *);
  20. Prototype   VALUE * cmd_setpref        (LONG, VALUE *);
  21. Prototype   VALUE * cmd_getpref        (LONG, VALUE *);
  22. Prototype   VALUE * cmd_info        (LONG, VALUE *);
  23. Prototype   VOID    setdefprefs        (VW *);
  24.  
  25. const UBYTE ConfigFileTxt[] = PREFFILE;
  26. STRPTR        ConfigFile        = ConfigFileTxt;
  27. LONG        ConfigVersion   = 7;
  28.  
  29. Prototype PREFS DefPrefs;
  30. Prototype WORD    DefDims[4];
  31. Prototype BOOL    SaveFilePrefs;
  32. Prototype BOOL    ScrollHack;
  33.  
  34. __config  PREFS DefPrefs =
  35. {
  36.     FALSE,
  37.     FALSE,
  38.     FALSE,
  39.     8,
  40.     8,
  41.     FALSE,
  42.     0,
  43.     77,
  44.     "topaz.font",
  45.     8,
  46.     "t:",
  47.     2,
  48.     ""
  49. };
  50. __config  WORD    DefDims[4] = { 0, 0, 640, 200 };
  51. __config  BOOL    SaveFilePrefs = FALSE;
  52. __config  BOOL    ScrollHack = TRUE;
  53.  
  54. VOID
  55. copyprefs(VW *dest, VW *src)
  56. {
  57.     if(src)
  58.     memcpy(&dest->vw_Prefs, &src->vw_Prefs, sizeof(PREFS));
  59.     else
  60.     memcpy(&dest->vw_Prefs, &DefPrefs, sizeof(PREFS));
  61. }
  62.  
  63. /*
  64.  * Copies PREFS from one view to all other views of the same file
  65.  * _doesn't_ copy font
  66.  */
  67. Local VOID
  68. cloneprefs(TX *tx, VW *src)
  69. {
  70.     VW *thisvw;
  71.     for(thisvw = (VW *)tx->tx_Views.mlh_Head; thisvw->vw_Node.mln_Succ; thisvw = (VW *)thisvw->vw_Node.mln_Succ)
  72.     {
  73.     if(thisvw != src)
  74.     {
  75.         PREFS *srcp = &src->vw_Prefs;
  76.         PREFS *dstp = &thisvw->vw_Prefs;
  77.         dstp->prf_WordWrap = srcp->prf_WordWrap;
  78.         dstp->prf_AutoIndent = srcp->prf_AutoIndent;
  79.         dstp->prf_TabSize = srcp->prf_TabSize;
  80.         dstp->prf_DiskTab = srcp->prf_DiskTab;
  81.         dstp->prf_SaveTabs = srcp->prf_SaveTabs;
  82.         dstp->prf_LeftMargin = srcp->prf_LeftMargin;
  83.         strcpy(dstp->prf_BakDir, srcp->prf_BakDir);
  84.         dstp->prf_MaxBak = srcp->prf_MaxBak;
  85.         strcpy(dstp->prf_ScreenName, srcp->prf_ScreenName);
  86.     }
  87.     }
  88. }
  89.  
  90. VOID
  91. getdefprefs(TX *dst)
  92. {
  93.     VW *thisvw;
  94.     dst->tx_ResetPrefs = FALSE;
  95.     for(thisvw = (VW *)dst->tx_Views.mlh_Head; thisvw->vw_Node.mln_Succ; thisvw = (VW *)thisvw->vw_Node.mln_Succ)
  96.     {
  97.     PREFS *srcp = &DefPrefs;
  98.     PREFS *dstp = &thisvw->vw_Prefs;
  99.     dstp->prf_WordWrap = srcp->prf_WordWrap;
  100.     dstp->prf_AutoIndent = srcp->prf_AutoIndent;
  101.     dstp->prf_TabSize = srcp->prf_TabSize;
  102.     dstp->prf_DiskTab = srcp->prf_DiskTab;
  103.     dstp->prf_SaveTabs = srcp->prf_SaveTabs;
  104.     dstp->prf_LeftMargin = srcp->prf_LeftMargin;
  105.     strcpy(dstp->prf_BakDir, srcp->prf_BakDir);
  106.     dstp->prf_MaxBak = srcp->prf_MaxBak;
  107.     strcpy(dstp->prf_ScreenName, srcp->prf_ScreenName);
  108.     }
  109. }
  110.  
  111. /*
  112.  * sets preferences from a string in the format,
  113.  * @@ww<+|->\ai<+|->\tsN\dtN\stN\lmN\rmN
  114.  * ie,
  115.  * @@ww-\ai+\ts4\dt8\st2\lm0\rm77
  116.  */
  117. Local BOOL
  118. interpretprefs(STRPTR str, TX *tx)
  119. {
  120.     BOOL rc = TRUE;
  121.     if((str[0] == '@') && (str[1] == '@'))
  122.     {
  123.     VW *vw = (VW *)tx->tx_Views.mlh_Head;
  124.     setdefprefs(vw);
  125.     str += 2;
  126.     while(*str && rc)
  127.     {
  128.         UWORD opt;
  129.         opt = (str[0] << 8) | str[1];
  130.         str += 2;
  131.         switch(opt)
  132.         {
  133.         case 'ww':
  134.             vw->vw_Prefs.prf_WordWrap = (*str == '+') ? TRUE : FALSE;
  135.             str++;
  136.             break;
  137.         case 'ai':
  138.             vw->vw_Prefs.prf_AutoIndent = (*str == '+') ? TRUE : FALSE;
  139.             str++;
  140.             break;
  141.         case 'ts':
  142.             WORD ts = strtol(str, &str, 0);
  143.             if(ts)
  144.             vw->vw_Prefs.prf_TabSize = ts;
  145.             else
  146.             settitle("error: tabsize must be >0");
  147.             break;
  148.         case 'dt':
  149.             WORD dt = strtol(str, &str, 0);
  150.             if(dt)
  151.             vw->vw_Prefs.prf_DiskTab = dt;
  152.             else
  153.             settitle("error: disktab must be >0");
  154.             break;
  155.         case 'st':
  156.             vw->vw_Prefs.prf_SaveTabs = strtol(str, &str, 0);
  157.             break;
  158.         case 'lm':
  159.             vw->vw_Prefs.prf_LeftMargin = strtol(str, &str, 0);
  160.             break;
  161.         case 'rm':
  162.             vw->vw_Prefs.prf_RightMargin = strtol(str, &str, 0);
  163.             break;
  164.         default:
  165.             settitle("error: unknown embedded preference");
  166.             rc = FALSE;
  167.             break;
  168.         }
  169.         if(*str == '\\')
  170.         str++;
  171.         else
  172.         str = str + strlen(str);
  173.     }
  174.     tx->tx_ResetPrefs = TRUE;
  175.     cloneprefs(tx, vw);
  176.     }
  177.     return(rc);
  178. }
  179.  
  180. BOOL
  181. setupfileprefs(TX *tx)
  182. {
  183.     BPTR lock;
  184.     BOOL rc = FALSE;
  185.     if(tx->tx_ResetPrefs)
  186.     getdefprefs(tx);
  187.     if(lock = Lock(tx->tx_FileName, SHARED_LOCK))
  188.     {
  189.     __aligned struct FileInfoBlock fib;
  190.     if(Examine(lock, &fib))
  191.         rc = interpretprefs(fib.fib_Comment, tx);
  192.     UnLock(lock);
  193.     }
  194.     return(rc);
  195. }
  196.  
  197. BOOL
  198. savefileprefs(TX *tx)
  199. {
  200.     BOOL rc = FALSE;
  201.     if(SaveFilePrefs)
  202.     {
  203.     BPTR lock = Lock(tx->tx_FileName, SHARED_LOCK);
  204.     if(lock)
  205.     {
  206.         __aligned struct FileInfoBlock fib;
  207.         if(Examine(lock, &fib))
  208.         {
  209.         STRPTR cmt = fib.fib_Comment;
  210.         if((!cmt[0]) || ((cmt[0] == '@') && (cmt[1] == '@')))
  211.         {
  212.             VW *vw = (VW *)tx->tx_Views.mlh_Head;
  213.             sprintf(cmt, "@@ww%lc\\ai%lc\\ts%ld\\dt%ld\\st%ld\\lm%ld\\rm%ld",
  214.             vw->vw_Prefs.prf_WordWrap ? '+' : '-',
  215.             vw->vw_Prefs.prf_AutoIndent ? '+' : '-',
  216.             vw->vw_Prefs.prf_TabSize,
  217.             vw->vw_Prefs.prf_DiskTab,
  218.             vw->vw_Prefs.prf_SaveTabs,
  219.             vw->vw_Prefs.prf_LeftMargin,
  220.             vw->vw_Prefs.prf_RightMargin);
  221.             rc = SetComment(tx->tx_FileName, cmt);
  222.         }
  223.         }
  224.         UnLock(lock);
  225.     }
  226.     }
  227.     else
  228.     rc = TRUE;
  229.     return(rc);
  230. }
  231.  
  232. VOID
  233. setdefprefs(VW *src)
  234. {
  235.     if(!src->vw_Tx->tx_ResetPrefs)
  236.     memcpy(&DefPrefs, &src->vw_Prefs, sizeof(PREFS));
  237.  
  238.     if(!src->vw_Prefs.prf_NoSnapshotWin)
  239.     memcpy(DefDims, src->vw_Sleeping ? src->vw_OldDimensions : &src->vw_Window->LeftEdge, 2*4);
  240. }
  241.  
  242. /*
  243.  * defines whether or not config file will be saved on exit
  244.  * returns *previous* status.
  245.  */
  246. VALUE *
  247. cmd_saveprefs(LONG argc, VALUE *argv)
  248. {
  249.     if(TPLATE1(VTF_NUMBER))
  250.     {
  251.     setnumres(ConfigFile ? TRUE : FALSE);
  252.     ConfigFile = ARG1.val_Value.Number ? ConfigFileTxt : NULL;
  253.     }
  254.     return(&RES);
  255. }
  256.  
  257. /*
  258.  * (setpref `font' `name.font' size)
  259.  * (setpref `wordwrap' bool)
  260.  * (setpref `autoindent' bool)
  261.  * (setpref `tabsize' size)
  262.  * (setpref `leftmargin' col)
  263.  * (setpref `rightmargin' col)
  264.  * (setpref `disktab' size)
  265.  * (setpref `savetabs' code)    0=none,1=leading,2=all
  266.  * (setpref `scrollhack' bool)
  267.  * (setpref `saveprefs' bool)
  268.  * (setpref `reset' bool)       ; undocumented!
  269.  * (setpref `nosnapshot' bool)
  270.  * (setpref `pubscreen' name)
  271.  */
  272. VALUE *
  273. cmd_setpref(LONG argc, VALUE *argv)
  274. {
  275.     WORD rc = -1;
  276.     if(ARG1.val_Type == VTF_STRING)
  277.     {
  278.     VW *vw = CurrVW;
  279.     switch(tolower(*(ARG1.val_Value.String)))
  280.     {
  281.         case 'a':   /* autoindent */
  282.         if(ARG2.val_Type == VTF_NUMBER)
  283.         {
  284.             vw->vw_Prefs.prf_AutoIndent = ARG2.val_Value.Number;
  285.             rc = TRUE;
  286.         }
  287.         break;
  288.         case 'd':   /* disktab */
  289.         if(ARG2.val_Type == VTF_NUMBER)
  290.         {
  291.             vw->vw_Prefs.prf_DiskTab = ARG2.val_Value.Number;
  292.             rc = TRUE;
  293.         }
  294.         break;
  295.         case 'f':   /* font */
  296.         if((ARG2.val_Type == VTF_STRING) && (ARG3.val_Type == VTF_NUMBER))
  297.         {
  298.             UBYTE oldfont[30];
  299.             LONG oldsize = vw->vw_Prefs.prf_FontSize;
  300.             strncpy(vw->vw_Prefs.prf_FontName, oldfont, 30);
  301.             vw->vw_Prefs.prf_FontSize = ARG3.val_Value.Number;
  302.             strncpy(vw->vw_Prefs.prf_FontName, ARG2.val_Value.String, 30);
  303.             if(setfont(vw))
  304.             {
  305.             vw->vw_RefreshType |= RFF_ALL;
  306.             resyncxy();
  307.             rc = TRUE;
  308.             }
  309.             else
  310.             {
  311.             settitle("error: can't open font");
  312.             strncpy(vw->vw_Prefs.prf_FontName, oldfont, 30);
  313.             vw->vw_Prefs.prf_FontSize = oldsize;
  314.             rc = FALSE;
  315.             }
  316.         }
  317.         break;
  318.         case 'l':   /* leftmargin */
  319.         if(ARG2.val_Type == VTF_NUMBER)
  320.         {
  321.             vw->vw_Prefs.prf_LeftMargin = ARG2.val_Value.Number - 1;
  322.             rc = TRUE;
  323.         }
  324.         break;
  325.         case 'r':   /* rightmargin | reset */
  326.         if(ARG2.val_Type == VTF_NUMBER)
  327.         {
  328.             if(!strcmp(ARG1.val_Value.String, "reset"))
  329.             vw->vw_Tx->tx_ResetPrefs = (BOOL)(ARG2.val_Value.Number);
  330.             else
  331.             vw->vw_Prefs.prf_RightMargin = ARG2.val_Value.Number - 1;
  332.             rc = TRUE;
  333.         }
  334.         break;
  335.         case 't':   /* tabsize */
  336.         if(ARG2.val_Type == VTF_NUMBER)
  337.         {
  338.             vw->vw_Prefs.prf_TabSize = ARG2.val_Value.Number;
  339.             rc = TRUE;
  340.         }
  341.         break;
  342.         case 'w':   /* wordwrap */
  343.         if(ARG2.val_Type == VTF_NUMBER)
  344.         {
  345.             vw->vw_Prefs.prf_WordWrap = ARG2.val_Value.Number;
  346.             rc = TRUE;
  347.         }
  348.         break;
  349.         case 's':   /* savetabs | scrollhack */
  350.         if(!strcmp(ARG1.val_Value.String, "saveprefs"))
  351.         {
  352.             SaveFilePrefs = ARG2.val_Value.Number;
  353.             rc = TRUE;
  354.         }
  355.         else if(ARG1.val_Value.String[1] != 'c')
  356.         {
  357.             if(ARG2.val_Type == VTF_NUMBER)
  358.             {
  359.             vw->vw_Prefs.prf_SaveTabs = ARG2.val_Value.Number;
  360.             rc = TRUE;
  361.             }
  362.         }
  363.         else
  364.         {
  365.             if(ARG2.val_Type == VTF_NUMBER)
  366.             {
  367.             ScrollHack = ARG2.val_Value.Number;
  368.             rc = TRUE;
  369.             }
  370.         }
  371.         break;
  372.         case 'b':
  373.         if(!stricmp(ARG1.val_Value.String, "bakdir"))
  374.         {
  375.             if(ARG2.val_Type == VTF_STRING)
  376.             {
  377.             strncpy(vw->vw_Prefs.prf_BakDir, ARG2.val_Value.String, 99);
  378.             rc = TRUE;
  379.             }
  380.         }
  381.         else
  382.         {
  383.             if(ARG2.val_Type == VTF_NUMBER)
  384.             {
  385.             vw->vw_Prefs.prf_MaxBak = ARG2.val_Value.Number;
  386.             rc = TRUE;
  387.             }
  388.         }
  389.         break;
  390.         case 'n':
  391.         if(ARG2.val_Type == VTF_NUMBER)
  392.         {
  393.             if((vw->vw_Prefs.prf_NoSnapshotWin = ARG2.val_Value.Number) > 1)
  394.             memcpy(DefDims, vw->vw_Sleeping ? vw->vw_OldDimensions : &vw->vw_Window->LeftEdge, 2*4);
  395.             rc = TRUE;
  396.         }
  397.         break;
  398.         case 'p':
  399.         if(ARG2.val_Type == VTF_STRING)
  400.         {
  401.             strncpy(vw->vw_Prefs.prf_ScreenName, ARG2.val_Value.String, 100);
  402.             rc = TRUE;
  403.         }
  404.         break;
  405.     }
  406.     }
  407.     if(rc != -1)
  408.     {
  409.     setnumres(rc);
  410.     }
  411.     else
  412.     settitle("error: bad args to setpref");
  413.     return(&RES);
  414. }
  415.  
  416. VALUE *
  417. cmd_getpref(LONG argc, VALUE *argv)
  418. {
  419.     if(ARG1.val_Type == VTF_STRING)
  420.     {
  421.     VW *vw = CurrVW;
  422.     switch(tolower(*(ARG1.val_Value.String)))
  423.     {
  424.         case 'a':   /* autoindent */
  425.         setnumres(vw->vw_Prefs.prf_AutoIndent);
  426.         break;
  427.         case 'd':   /* disktab */
  428.         setnumres(vw->vw_Prefs.prf_DiskTab);
  429.         break;
  430.         case 'f':   /* font */
  431.         settitle("not implemented, sorry");
  432.         break;
  433.         case 'l':   /* leftmargin */
  434.         setnumres(vw->vw_Prefs.prf_LeftMargin);
  435.         break;
  436.         case 'r':   /* rightmargin */
  437.         if(!strcmp(ARG1.val_Value.String, "reset"))
  438.         {
  439.             setnumres(vw->vw_Tx->tx_ResetPrefs);
  440.         }
  441.         else
  442.         {
  443.             setnumres(vw->vw_Prefs.prf_RightMargin);
  444.         }
  445.         break;
  446.         case 't':   /* tabsize */
  447.         setnumres(vw->vw_Prefs.prf_TabSize);
  448.         break;
  449.         case 'w':   /* wordwrap */
  450.         setnumres(vw->vw_Prefs.prf_WordWrap);
  451.         break;
  452.         case 's':
  453.         if(!strcmp(ARG1.val_Value.String, "saveprefs"))
  454.         {
  455.             setnumres(SaveFilePrefs);
  456.         }
  457.         else if(ARG1.val_Value.String[1] == 'c')
  458.         {
  459.             setnumres(ScrollHack);
  460.         }
  461.         else
  462.         {
  463.             setnumres(vw->vw_Prefs.prf_SaveTabs);
  464.         }
  465.         break;
  466.         case 'b':
  467.         if(!stricmp(ARG1.val_Value.String, "bakdir"))
  468.         {
  469.             setstrres(savestring(vw->vw_Prefs.prf_BakDir));
  470.         }
  471.         else
  472.         {
  473.              setnumres(vw->vw_Prefs.prf_MaxBak);
  474.         }
  475.         break;
  476.         case 'n':
  477.         setnumres(vw->vw_Prefs.prf_NoSnapshotWin);
  478.         break;
  479.         case 'p':
  480.         STRPTR tmp = savestring(vw->vw_Prefs.prf_ScreenName);
  481.         if(tmp)
  482.         {
  483.             setstrres(tmp);
  484.         }
  485.         else
  486.             settitle(NoMemMsg);
  487.         break;
  488.         default:
  489.         settitlefmt("error: unrecognized pref %s", (LONG)ARG1.val_Value.String);
  490.         break;
  491.     }
  492.     }
  493.     else
  494.     settitle("syntax error: argument 1 should be a string");
  495.     return(&RES);
  496. }
  497.  
  498. /*
  499.  * (info `what')
  500.  *
  501.  * "what" can be,
  502.  *    col
  503.  *    line
  504.  *    lines
  505.  *    cols
  506.  *    size
  507.  *    offset
  508.  *    changes
  509.  *    views
  510.  *    files
  511.  *    windows
  512.  *    char
  513.  *    fullname
  514.  *    filename
  515.  *    dirname
  516.  *    time
  517.  *    date
  518.  *    cd
  519.  *    rev
  520.  *    screenx        -- width of screen
  521.  *    screeny        -- height of screen
  522.  *    leftedge    -- x pos of window
  523.  *    topedge
  524.  *    width        -- width of window (pixels)
  525.  *    height
  526.  *    asleep
  527.  *    port
  528.  *    barheight
  529.  */
  530. VALUE *
  531. cmd_info(LONG argc, VALUE *argv)
  532. {
  533.     if(TPLATE1(VTF_STRING))
  534.     {
  535.     STRPTR what = ARG1.val_Value.String;
  536.     VW *vw = CurrVW;
  537.     TX *tx = vw->vw_Tx;
  538.  
  539.     if(!stricmp(what, "col"))
  540.     {
  541.         setnumres(vw->vw_CursorPos.pos_Col + 1);
  542.     }
  543.     else if(!stricmp(what, "line"))
  544.     {
  545.         setnumres(vw->vw_CursorPos.pos_Line + 1);
  546.     }
  547.     else if(!stricmp(what, "lines"))
  548.     {
  549.         setnumres(tx->tx_NumLines);
  550.     }
  551.     else if(!stricmp(what, "cols"))
  552.     {
  553.         setnumres(tx->tx_Lines[vw->vw_CursorPos.pos_Line].ln_Strlen);
  554.     }
  555.     else if(!stricmp(what, "size"))
  556.     {
  557.         setnumres(size());
  558.     }
  559.     else if(!stricmp(what, "offset"))
  560.     {
  561.         setnumres(offset());
  562.     }
  563.     else if(!stricmp(what, "changes"))
  564.     {
  565.         setnumres(tx->tx_Changes);
  566.     }
  567.     else if(!stricmp(what, "views"))
  568.     {
  569.         setnumres(numviews(tx));
  570.     }
  571.     else if(!stricmp(what, "files"))
  572.     {
  573.         setnumres(numtxs());
  574.     }
  575.     else if(!stricmp(what, "windows"))
  576.     {
  577.         setnumres(NumWindows);
  578.     }
  579.     else if(!stricmp(what, "char"))
  580.     {
  581.         if(vw->vw_CursorPos.pos_Col < tx->tx_Lines[vw->vw_CursorPos.pos_Line].ln_Strlen)
  582.         {
  583.         setnumres(tx->tx_Lines[vw->vw_CursorPos.pos_Line].ln_Line[vw->vw_CursorPos.pos_Col]);
  584.         }
  585.         else
  586.         {
  587.         setnumres(0);
  588.         }
  589.     }
  590.     else if(!stricmp(what, "fullname"))
  591.     {
  592.         STRPTR name = savestring(tx->tx_FileName);
  593.         if(name)
  594.         {
  595.         setstrres(name);
  596.         }
  597.         else
  598.         settitle(NoMemMsg);
  599.     }
  600.     else if(!stricmp(what, "filename"))
  601.     {
  602.         STRPTR name = savestring(FilePart(tx->tx_FileName));
  603.         if(name)
  604.         {
  605.         setstrres(name);
  606.         }
  607.         else
  608.         settitle(NoMemMsg);
  609.     }
  610.     else if(!stricmp(what, "dirname"))
  611.     {
  612.         ULONG length;
  613.         STRPTR name;
  614.         length = FilePart(tx->tx_FileName) - tx->tx_FileName;
  615.         if(name = savestringn(tx->tx_FileName, length))
  616.         {
  617.         setstrres(name);
  618.         }
  619.         else
  620.         settitle(NoMemMsg);
  621.     }
  622.     else if(!stricmp(what, "time"))
  623.     {
  624.         UBYTE buff[256];
  625.         struct DateTime date;
  626.  
  627.         DateStamp(&date.dat_Stamp);
  628.         date.dat_Format = FORMAT_DOS;
  629.         date.dat_Flags = 0;
  630.         date.dat_StrDay = NULL;
  631.         date.dat_StrDate = NULL;
  632.         date.dat_StrTime = buff;
  633.  
  634.         if(DateToStr(&date))
  635.         {
  636.         STRPTR time = savestring(buff);
  637.         if(time)
  638.         {
  639.             setstrres(time);
  640.         }
  641.         }
  642.     }
  643.     else if(!stricmp(what, "date"))
  644.     {
  645.         UBYTE buff[256];
  646.         struct DateTime date;
  647.  
  648.         DateStamp(&date.dat_Stamp);
  649.         date.dat_Format = FORMAT_DOS;
  650.         date.dat_Flags = 0;
  651.         date.dat_StrDay = NULL;
  652.         date.dat_StrDate = buff;
  653.         date.dat_StrTime = NULL;
  654.  
  655.         if(DateToStr(&date))
  656.         {
  657.         STRPTR date = savestring(buff);
  658.         if(date)
  659.         {
  660.             setstrres(date);
  661.         }
  662.         }
  663.     }
  664.     else if(!stricmp(what, "cd"))
  665.     {
  666.         UBYTE buff[256];
  667.         if(NameFromLock(((struct Process *)FindTask(0L))->pr_CurrentDir, buff ,256))
  668.         {
  669.         STRPTR cd = savestring(buff);
  670.         if(cd)
  671.         {
  672.             setstrres(cd);
  673.         }
  674.         }
  675.     }
  676.     else if(!stricmp(what, "rev"))
  677.     {
  678.         setnumres(RELEASE);
  679.     }
  680.     else if(!stricmp(what, "screenx"))
  681.     {
  682.         setnumres(vw->vw_Window->WScreen->Width);
  683.     }
  684.     else if(!stricmp(what, "screeny"))
  685.     {
  686.         setnumres(vw->vw_Window->WScreen->Height);
  687.     }
  688.     else if(!stricmp(what, "leftedge"))
  689.     {
  690.         setnumres(vw->vw_Window->LeftEdge);
  691.     }
  692.     else if(!stricmp(what, "topedge"))
  693.     {
  694.         setnumres(vw->vw_Window->TopEdge);
  695.     }
  696.     else if(!stricmp(what, "width"))
  697.     {
  698.         setnumres(vw->vw_Window->Width);
  699.     }
  700.     else if(!stricmp(what, "height"))
  701.     {
  702.         setnumres(vw->vw_Window->Height);
  703.     }
  704.     else if(!stricmp(what, "asleep"))
  705.     {
  706.         setnumres(vw->vw_Sleeping);
  707.     }
  708.     else if(!stricmp(what, "port"))
  709.     {
  710.         STRPTR copy = savestring(RexxName);
  711.         if(copy)
  712.         setstrres(copy);
  713.     }
  714.     else if(!stricmp(what, "barheight"))
  715.     {
  716.         setnumres((LONG)vw->vw_Window->BorderTop);
  717.     }
  718.     else
  719.         settitlefmt("error: unknown info requested (%s)", (LONG)what);
  720.     }
  721.     return(&RES);
  722. }
  723.